/**
 * 配置枚举 (ConfigEnum)
 *
 * 这个枚举定义了应用程序中所有配置项的键名常量
 *
 * 使用枚举的优势：
 * 1. 类型安全：避免配置键名的拼写错误
 * 2. 代码提示：IDE 可以提供自动补全
 * 3. 重构友好：修改配置键名时可以全局替换
 * 4. 文档化：清晰地展示所有可用的配置项
 *
 * 使用示例：
 * ```typescript
 * // 在服务中使用
 * const dbHost = this.configService.get(ConfigEnum.DB_HOST);
 *
 * // 而不是使用字符串（容易出错）
 * const dbHost = this.configService.get('DB_HOST');
 * ```
 */
export enum ConfigEnum {
  /**
   * 数据库类型
   * 支持的值: 'mysql' | 'postgres' | 'sqlite' | 'mariadb'
   * 默认值: 'mysql'
   */
  DB_TYPE = "DB_TYPE",

  /**
   * 数据库主机地址
   * 示例: 'localhost', '127.0.0.1', 'db.example.com'
   * 默认值: 'localhost'
   */
  DB_HOST = "DB_HOST",

  /**
   * 数据库端口号
   * MySQL 默认: 3306
   * PostgreSQL 默认: 5432
   */
  DB_PORT = "DB_PORT",

  /**
   * 数据库名称
   * 应用程序要连接的具体数据库名称
   */
  DB_DATABASE = "DB_DATABASE",

  /**
   * 数据库用户名
   * 用于数据库连接认证的用户名
   */
  DB_USERNAME = "DB_USERNAME",

  /**
   * 数据库密码
   * 用于数据库连接认证的密码
   * 注意：生产环境中应该通过环境变量或密钥管理系统提供
   */
  DB_PASSWORD = "DB_PASSWORD",

  /**
   * 数据库同步选项
   *
   * 当设置为 true 时，TypeORM 会自动：
   * 1. 根据实体定义创建数据库表
   * 2. 同步表结构变更（添加/删除字段等）
   *
   * 重要提醒：
   * - 开发环境：可以设置为 true，方便快速开发
   * - 生产环境：必须设置为 false，避免意外的数据丢失
   * - 生产环境应该使用数据库迁移 (Migration) 来管理表结构变更
   *
   * 类型: boolean
   * 默认值: false
   */
  DB_SYNC = "DB_SYNC",

  /**
   * 是否显示日志
   *
   * 类型: boolean
   * 默认值: false
   */
  DB_LOGGING = "DB_LOGGING",

  /**
   * Redis 密码
   *
   * 类型: string
   * 默认值: REDIS_PASSWORD
   */
  REDIS_PASSWORD = "REDIS_PASSWORD",

  /**
   * 日志级别
   *
   * 类型: LogLevel
   * 默认值: LogLevel.INFO
   */
  LOG_LEVEL = "LOG_LEVEL",
  /**
   * jwt secret
   *
   * 类型: string
   */
  SECRET = "SECRET",
  /**
   * JWT token 过期时间（秒）
   *
   * 类型: number
   * 默认值: 3600 (1天)
   */
  JWT_EXPIRES_IN = "JWT_EXPIRES_IN",
}
